#include "stm32f10x.h"                  // Device header

/*
ADC初始化设置
*/
void AD_Init(void)
{
	//OPEN CLOCK
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	// GPIOA_PIN_7 SETTING
	GPIO_InitTypeDef GPIOA_InitStructure;
	GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_AIN;					// 模拟输入
	GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIOA_InitStructure);
	
	// 填充规则组菜单列表(在规则组的序列1里面, 写入通道0的数据)
	ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_55Cycles5);  // 规则组配置
	
	// ADC 初始化操作
	ADC_InitTypeDef ADC1_InitStructure;
	ADC1_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;						// 使用右对齐
	ADC1_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;		// 不用外部触发,即使用内部软件触发
	ADC1_InitStructure.ADC_Mode = ADC_Mode_Independent;							// 单ADC转换
	ADC1_InitStructure.ADC_NbrOfChannel = 1;									// 只有一个扫描对象,在扫描模式下才有用
	ADC1_InitStructure.ADC_ScanConvMode = DISABLE;								// 使用非扫描模式
	ADC1_InitStructure.ADC_ContinuousConvMode = DISABLE;						// 使用单次转换模式
	ADC_Init(ADC1,&ADC1_InitStructure);
	
	// 注意要先使能打开ADC, 再校准
	ADC_Cmd(ADC1, ENABLE);
	
	// 校准ADC
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1) == SET);
	ADC_StartCalibration(ADC1);													
	while(ADC_GetCalibrationStatus(ADC1) == SET);
}

uint16_t AD_GetValue(void)
{
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
	while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);							// 该函数读取value后自动清除标志位
//	ADC_GetITStatus(ADC1, 
	return ADC_GetConversionValue(ADC1);
}
